﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BL.Entities;
namespace zCO
{
    public partial class frmAgregarDetallePrestacion : Form
    {
      
        public frmAgregarDetallePrestacion()
        {
            InitializeComponent();
        }
        bool ForceClose = false;
        private void dgvDetallePrestacion_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                switch (e.ColumnIndex)
                {
                    case 0: //Edito la Matricula profesional
                        ColeccionProfesionales cp = ColeccionProfesionales.Current.GetByMatricula(dgvDetallePrestacion[0, e.RowIndex].Value.ToString());
                        if (cp.Count == 1)
                        {
                            if (cp[0].Activo == true)
                            {
                                dgvDetallePrestacion[1, e.RowIndex].Value = cp[0].GetNombreFormal();
                                if (dgvDetallePrestacion[0, e.RowIndex + 1].Value == null)
                                {
                                    dgvDetallePrestacion[0, e.RowIndex + 1].Value = dgvDetallePrestacion[0, e.RowIndex].Value;
                                    dgvDetallePrestacion[1, e.RowIndex + 1].Value = cp[0].GetNombreFormal();
                                }
                            }
                            else {
                                dgvDetallePrestacion[1, e.RowIndex].Value = "M.P. Incorrecta";
                            }

                        }
                        else
                        {
                            dgvDetallePrestacion[1, e.RowIndex].Value = "M.P. Incorrecta";
                        }
                        break;
                    case 2:
                        Paciente p = ColeccionPacientes.FindById(dgvDetallePrestacion[2, e.RowIndex].Value.ToString());
                        if (dgvDetallePrestacion[2, e.RowIndex + 1].Value == null)
                        {
                            dgvDetallePrestacion[2, e.RowIndex + 1].Value = dgvDetallePrestacion[2, e.RowIndex].Value;
                        }
                        if (p != null)
                        {
                            if (dgvDetallePrestacion[3, e.RowIndex + 1].Value == null)
                            {
                                dgvDetallePrestacion[3, e.RowIndex+1].Value = p.GetNombreFormal();
                            }
                            dgvDetallePrestacion[3, e.RowIndex].Value = p.GetNombreFormal();
                        }
                        else
                        {
                            dgvDetallePrestacion[3, e.RowIndex].Value = "";
                        }
                        break;
                    case 3:
                        if (dgvDetallePrestacion[3, e.RowIndex + 1].Value == null)
                        {
                            dgvDetallePrestacion[3, e.RowIndex + 1].Value = dgvDetallePrestacion[3, e.RowIndex].Value;
                        }
                        break;
                    case 4:
                        if (dgvDetallePrestacion[4, e.RowIndex + 1].Value == null)
                        {
                            dgvDetallePrestacion[4, e.RowIndex + 1].Value = dgvDetallePrestacion[4, e.RowIndex].Value;
                        }
                        break;

                    case 5:
                        int nroAux;
                        if (int.TryParse(dgvDetallePrestacion[5, e.RowIndex].Value.ToString(), out nroAux))
                        {
                            double precio = ColeccionObrasSociales.Current.GetByNombre(dgvDetallePrestacion[4, e.RowIndex].Value.ToString()).PrecioPrestaciones.GetPrecioById(nroAux);
                            //Prestaciones prest = ColeccionPrestaciones.Current.getByObraSocialNroPrestacion(dgvDetallePrestacion[4, e.RowIndex].Value.ToString(), nroAux);
                            if (precio != -1)
                            {
                                dgvDetallePrestacion[8, e.RowIndex].Value = precio;
                            }
                            else {
                                dgvDetallePrestacion[8, e.RowIndex].Value = "Error";
                            }

                       
                        }

                        break;

                }
            }
            catch (Exception ex)
            {
                //En realidad habria que sacar este try......
            }
        }

        private void frmAgregarDetallePrestacion_Load(object sender, EventArgs e)
        {
            
            DataGridViewComboBoxColumn dgvCmb = new DataGridViewComboBoxColumn();
            dgvCmb.DataSource = ColeccionObrasSociales.Current;
            dgvCmb.DisplayMember = "NombreObra";
            dgvCmb.ValueMember = "NombreObra";
            dgvCmb.DataPropertyName = "NombreObra";
            dgvCmb.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton;
            dgvCmb.FlatStyle = FlatStyle.Flat;
            
           
            dgvDetallePrestacion.Columns.Insert(4, dgvCmb);
            dgvDetallePrestacion.Columns[4].Name = "ObraSocial";

            dgvDetallePrestacion.Columns[4].HeaderText = "Obra Social";

           
            for (int i = -8; i < 4; i++)
            {
                DateTime dt = new DateTime();
                dt = DateTime.Now;
                cmbMeses.Items.Add(dt.AddMonths(i).ToString("yyyy - MMMM").ToUpper() );
               
                     
            }
            cmbMeses.SelectedIndex = 7;
                     
        }

        private void frmAgregarDetallePrestacion_FormClosing(object sender, FormClosingEventArgs e)
        {

            int cant = dgvDetallePrestacion.Rows.Count - 1;
            if (cant > 0 && !ForceClose) {
                DialogResult dr = MessageBox.Show("Se agregaron " + cant.ToString() + " registros.\n ¿Desea Guardarlos?", "Agregar Prestaciones", MessageBoxButtons.YesNoCancel);
                switch (dr)
                {
                    case DialogResult.Abort:
                        break;
                    case DialogResult.Cancel:
                        e.Cancel = true;
                        break;
                    case DialogResult.Ignore:
                        break;
                    case DialogResult.No:
                        break;
                    case DialogResult.None:
                        break;
                    case DialogResult.OK:
                        break;
                    case DialogResult.Retry:
                        break;
                    case DialogResult.Yes:
                        Guardar();
                        e.Cancel = false;
                        break;
                    default:
                        break;
            }

            }
            else
            {
                e.Cancel = false;
            }

        }

            /// <summary>
            /// 
            /// </summary>
            /// <returns>Cantidad de registros guardados correctamente</returns>
        private int Guardar()
        {

            Intervenciones interv;
            int c = 0;

            int cant = 0;
            foreach (var item in dgvDetallePrestacion.Rows)
            {

                //controlo que no haya ninguna celda vacia
                bool flag = true;
                for (int i = 0; i < 9; i++)
                {
                    if (dgvDetallePrestacion[i, c].Value == null && i != 7  && i != 6)
                    {
                        flag = false;
                    }


                }           
                //controlo que no existan errores
                if (flag)
                {
                    if (dgvDetallePrestacion[1, c].Value.ToString() == "M.P. Incorrecta" || dgvDetallePrestacion[8, c].Value.ToString() == "Error")
                    {
                        flag = false;
                    }
                }

                if (flag)
                {
                    interv = new Intervenciones();
                    if (dgvDetallePrestacion["Cara", c].Value != null)
                    {
                        interv.Cara = dgvDetallePrestacion["Cara", c].Value.ToString();
                    }
                    if (dgvDetallePrestacion["Elemento", c].Value != null)
                    {
                        interv.Elemento = dgvDetallePrestacion["Elemento", c].Value.ToString();
                    }
                    interv.IdPrestacion = int.Parse(dgvDetallePrestacion["NroPrestacion", c].Value.ToString());
                    interv.Matricula = int.Parse(dgvDetallePrestacion["MP", c].Value.ToString());

                    interv.NombreObraSocial = dgvDetallePrestacion["ObraSocial", c].Value.ToString();
                    if (ColeccionPacientes.FindById(dgvDetallePrestacion["NroAfiliado", c].Value.ToString()) == null)
                    {
                        Paciente pac = new Paciente();
                        pac.NumeroAfiliado = dgvDetallePrestacion["NroAfiliado", c].Value.ToString();
                        pac.Apellido = dgvDetallePrestacion["NombreAfiliado", c].Value.ToString();
                        pac.ObraSocial = ColeccionObrasSociales.Current.GetByNombre(dgvDetallePrestacion["ObraSocial", c].Value.ToString());

                        pac.Save();
                    }
                    interv.NumeroAfiliado = dgvDetallePrestacion["NroAfiliado", c].Value.ToString();
                    interv.Estado = "Aceptada";
                    interv.Fecha = DateTime.Now.ToShortDateString();
                    interv.Fecha = DateTime.Now.AddMonths(cmbMeses.SelectedIndex - 8).AddDays(15 - DateTime.Now.Day).ToShortDateString();

                    interv.Abonada = "False";
                    interv.Save();
                    cant++;
                }
                c++;
            }
            return cant;

        }

        private void dgvDetallePrestacion_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (e.Control is DataGridViewTextBoxEditingControl && ((DataGridView)sender).CurrentCell.ColumnIndex == 0)
            {
                DataGridViewTextBoxEditingControl te = (DataGridViewTextBoxEditingControl)e.Control;
                te.AutoCompleteMode = AutoCompleteMode.Append;
                te.AutoCompleteSource = AutoCompleteSource.CustomSource;
                foreach (var item in ColeccionProfesionales.Current)
                {
                    if (item.Activo == true)
                    {
                        
                        te.AutoCompleteCustomSource.Add(item.Matricula.ToString());
                    }
                }

            }

            if (e.Control is DataGridViewTextBoxEditingControl && ((DataGridView)sender).CurrentCell.ColumnIndex == 2)
            {
                DataGridViewTextBoxEditingControl te = (DataGridViewTextBoxEditingControl)e.Control;
                te.AutoCompleteMode = AutoCompleteMode.None;


            }
            if (e.Control is DataGridViewTextBoxEditingControl && ((DataGridView)sender).CurrentCell.ColumnIndex == 5)
            {
                DataGridViewTextBoxEditingControl te = (DataGridViewTextBoxEditingControl)e.Control;
                te.AutoCompleteMode = AutoCompleteMode.None ;
                //te.AutoCompleteSource = AutoCompleteSource.CustomSource;
                //foreach (var item in ColeccionPrestaciones.Current  )
                //{
                //    te.AutoCompleteCustomSource.Add(item.IdPrestacion.ToString() );
                //}
              

            }
        }
        
        

        private void cmdCancelar_Click(object sender, EventArgs e)
        {
            ForceClose = true;
            this.Close();
        }

        private void cmdAceptar_Click(object sender, EventArgs e)
        {
            int cant = Guardar();
           
            MessageBox.Show("Se guardaron " + cant.ToString()  +" registros con exito!");
            ForceClose = true;
            this.Close();
        }

        private void dgvDetallePrestacion_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
           
            if (e.RowIndex != 0 && dgvDetallePrestacion.CurrentCell.ColumnIndex>4) {
                
                for (int i = 0; i < 5; i++)
                {
                    if (dgvDetallePrestacion[i, e.RowIndex - 1].Value != null && dgvDetallePrestacion[i, e.RowIndex].Value == null) {
                        dgvDetallePrestacion[i, e.RowIndex].Value = dgvDetallePrestacion[i, e.RowIndex - 1].Value;
                    }    
                }
               
            
            }



            if (e.RowIndex != 0 && dgvDetallePrestacion.CurrentCell.ColumnIndex ==2)
            {

                for (int i = 0; i < 5; i++)
                {
                    if (dgvDetallePrestacion[i, e.RowIndex - 1].Value != null && dgvDetallePrestacion[i, e.RowIndex].Value == null && i!=2 && i != 3)
                    {
                        dgvDetallePrestacion[i, e.RowIndex].Value = dgvDetallePrestacion[i, e.RowIndex - 1].Value;
                    }
                }


            }

            if (e.RowIndex != 0 && dgvDetallePrestacion.CurrentCell.ColumnIndex == 0)
            {

                    int i = 4;
                    if (dgvDetallePrestacion[i, e.RowIndex - 1].Value != null && dgvDetallePrestacion[i, e.RowIndex].Value == null )
                    {
                        dgvDetallePrestacion[i, e.RowIndex].Value = dgvDetallePrestacion[i, e.RowIndex - 1].Value;
                    }
                


            }
        }

    }
}